package controlador;

/**
 *Responsavel pelas regras de negócio do usuario
 * Faz todo o tratamento de erro, exceções e mensagens
 */
import classes.Categoria;
import dao.DaoCategoria;
import dao.IDaoCategoria;
import erro.ConexaoException;
import erro.ConsultaException;
import erro.DaoException;
import erro.GeralException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ControladorCategoria {

    Categoria cat = new Categoria();
    private IDaoCategoria daoCat = new DaoCategoria();

    public ControladorCategoria() {
        this.daoCat = new DaoCategoria();
    }

    /**
     * Validação antes de inserir uma nova categoria
     * @param cat
     * @throws GeralException 
     */
    public void validar(Categoria cat) throws GeralException {
        if (cat.getNomeCategoria().trim().equals("")) {
            throw new GeralException("Informe o Nome da Categoria!");
        }
    }

    /**
     * trata os possiveis erros na hora da inserção
     * @param cat
     * @throws GeralException 
     */
    public void inserir(Categoria cat) throws GeralException {
        try {
            this.daoCat.inserir(cat);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException e) {
            throw new GeralException("Não foi possivel inserir a Categoria! Informe ao Administrador!");
        }
    }

    /**
     * Trata os possiveis erros na hora da alteração
     * @param cat
     * @throws GeralException 
     */
    public void alterar(Categoria cat) throws GeralException {
        try {
            this.daoCat.alterar(cat);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException e) {
            throw new GeralException("Não foi possivel alterar a Categoria! Informe ao Administrador!");
        }
    }

    /**
     * Trata os possiveis erros na hora da exclusão
     * @param cat
     * @throws ConexaoException
     * @throws ConsultaException
     * @throws GeralException 
     */
    public void deletar(Categoria cat) throws ConexaoException, ConsultaException, GeralException {
        try {
            this.daoCat.deletar(cat);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException e) {
            throw new GeralException("Não foi possivel deletar a Categoria! Informe ao Administrador!");
        }
    }

    /**
     * Trata os possiveis erros na hora da pesquisa
     * @param cat
     * @return
     * @throws GeralException
     * @throws DaoException 
     */
    public Categoria pesquisarCategoria(Categoria cat) throws GeralException, DaoException {
        try {
            this.daoCat.pesquisar(cat);
            if (cat.getCodCategoria() == null) {
                throw new DaoException("Categoria não Encontrada!");
            }

        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        }
        return (cat);
    }

    /**
     * Trata os possiveis erros na hora da pesquisa
     * @param cat
     * @return
     * @throws GeralException
     * @throws DaoException 
     */
    public ArrayList<Categoria> pesquisarCategoriaCat(Categoria cat) throws ConexaoException, ConsultaException {
        return (ArrayList<Categoria>) this.daoCat.pesquisarCat(cat);

    }

    /**
     * Trata os possiveis erros na hora da listagem
     * @param cat
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Categoria> listar(Categoria cat) throws ConexaoException, ConsultaException {
        return (ArrayList<Categoria>) this.daoCat.listar();
    }
}
